package de.hdu.tennis.dao;


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


import de.hdu.tennis.model.Mitglied;
import de.hdu.tennis.model.Reservierung;
import de.hdu.tennis.model.Tennisplatz;



/**
 * Data Access Object for ReservierungDao 
 * @author Lilli Kardapolzew, Katharina Weber, Carolina Hirtreiter 
 */

public class ReservierungDao extends HibernateDaoSupport {
	/**
	 * Insert/Update a Status of ReservierungDao into database 
	 * @param reservierung is the Object which will be saved into database
	 * @return the object specified by the parameter
	 */
	public Reservierung save(Reservierung reservierung, Integer t_pk, Integer m_pk) {
		HibernateTemplate template = getHibernateTemplate();
		Tennisplatz t = (Tennisplatz) template.get(Tennisplatz.class, t_pk);
		Mitglied m = (Mitglied) template.get(Mitglied.class, m_pk);
		reservierung.setMitglied(m);
		reservierung.setTennisplatz(t);
		template.saveOrUpdate(reservierung);
		return reservierung;
	}
	
	/**
	 * return ReservierungDao by primery key: id  
	 * @param reservierung is the Object which will be saved into database
	 * @return the object specified by the parameter
	 */
	public Reservierung findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Reservierung) template.get(Reservierung.class, id);
	}
	
	
	/**
	 * list all existing Status in the database 
	 * @param status 
	 * @return list all Status
	 */
	public List<Reservierung> findAll() {
		HibernateTemplate template = getHibernateTemplate(); 
		List<Reservierung> res= template.loadAll(Reservierung.class);
		for (Reservierung reservierung : res) {
			reservierung= berechnePreis(reservierung);
		}
		return res;
	}
	
	
	public List<Reservierung> findAllForMember(int mId) {
		HibernateTemplate template = getHibernateTemplate(); 
		List<Reservierung> res= template.loadAll(Reservierung.class);
		List<Reservierung> result=new ArrayList<Reservierung>();
		for (Reservierung reservierung : res) {
			if (reservierung.getMitglied().getId()==mId) {
				reservierung=berechnePreis(reservierung);
				result.add(reservierung);
			}		
		}
		return result;
	}
	
	private Reservierung berechnePreis(Reservierung reservierung)
	{
		
		long hours = (reservierung.getEndres().getTime() - reservierung.getStartres().getTime())/(1000*60*60);
		
		reservierung.setPreis(hours* de.hdu.tennis.helper.Configuration.Preis);
		return reservierung;
	}
	
	public void delete(Reservierung reservierung) {
		HibernateTemplate template = getHibernateTemplate();
		template.delete(reservierung);
	}
	
    Date myStringtoDate(String s) throws ParseException{
    	
		DateFormat df = DateFormat.getDateInstance();
    	SimpleDateFormat sdf = (SimpleDateFormat)df;
    	sdf.applyPattern("MM/dd/yyy");
    	return df.parse(s);
    }

}
